<?php

namespace app\common\command;


use app\api\controller\Index;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;

class Go extends Command
{
    protected function configure()
    {
        $this->setName('go')
            ->setDescription('推送消息开始');
    }

    //爬取企业信息
    protected function execute(Input $input, Output $output)
    {
//        $page=0;
//        $num=0;
//        $index=new Index();
//
//        $sql="SELECT *,degree - over FROM `fa_push` WHERE	degree - over > 0 ORDER BY	`id` LIMIT ".$num.",500";
//        while($all=
//            Db::query($sql)
//        ){
//            var_dump($sql);
//            $page=$page+1;
//            $num=$page*500;
//            echo '1';
//            foreach ($all as $key => $value) {
//                $board=Db::name('board')->where('id',$value['board_id'])->find();
//                $user=Db::name('user')->where('id',$value['user_id'])->find();
//                if($value['lasttime']==''){
//                    //该推送
//                    $res=$index->send($user['mp_wx_openid'],$board['wx_id']);
//                    if(!$res){
//                        $output->writeln($user['id']."推送有误，模板id:".$board['id']);
//                    }else{
//                        Db::name('push')->where('id',$value['id'])->setInc('over','1');
//                        Db::name('push')->where('id',$value['id'])->update(['lasttime'=>time()]);
//                    }
//                    continue;
//                }
//                //判断该不该推送
//                if($value['type']=='1'){
//                    //周
//                    $should=bcmul($value['number'],'604800');
//                }else{
//                    //月
//                    $should=bcmul($value['number'],'2592000');
//                }
//                if(bcadd($value['lasttime'],$should)<time()){
//                    //该推送
//                    $res=$index->send($user['mp_wx_openid'],$board['wx_id']);
//                    if(!$res){
//                        $output->writeln($user['id']."推送有误，模板id:".$board['id']);
//                    }else{
//                        Db::name('push')->where('id',$value['id'])->setInc('over','1');
//                        Db::name('push')->where('id',$value['id'])->update(['lasttime'=>time()]);
//                    }
//
//                }
//
//
////                var_dump($all);
////                if(失败){
//                    //失败 结束本次循环
//                    continue;
////                }
//                //成功
//
//            }
//        }
        $this->fd(0);
        $output->writeln("推送消息执行完成!");
    }

    public function fd($page=0)
    {
        $index=new Index();
        $num=bcmul($page,500);
        $sql="SELECT *,degree - over FROM `fa_push` WHERE	degree - over > 0 ORDER BY	`id` LIMIT $num,500";
        $all=Db::query($sql);
        if($all){
            //存在
            foreach ($all as $key => $value) {
                $board=Db::name('board')->where('id',$value['board_id'])->find();
                $user=Db::name('user')->where('id',$value['user_id'])->find();
                if($value['lasttime']==''){
                    //该推送
                    $res=$index->send($user['mp_wx_openid'],$board,$value,'1');
                    if(!$res){
                        $output->writeln($user['id']."推送有误，模板id:".$board['id']);
                    }else{
                        Db::name('push')->where('id',$value['id'])->setInc('over','1');
                        Db::name('push')->where('id',$value['id'])->update(['lasttime'=>time()]);
                    }
                    continue;
                }
                //判断该不该推送
                if($value['type']=='1'){
                    //周
                    $should=bcmul($value['number'],'604800');
                }else{
                    //月
                    $should=bcmul($value['number'],'2592000');
                }
                if(bcadd($value['lasttime'],$should)<time()){
                    //该推送
                    $res=$index->send($user['mp_wx_openid'],$board,$value,$value['over']+1);
                    if(!$res){
                        $output->writeln($user['id']."推送有误，模板id:".$board['id']);
                    }else{
                        Db::name('push')->where('id',$value['id'])->setInc('over','1');
                        Db::name('push')->where('id',$value['id'])->update(['lasttime'=>time()]);
                    }

                }

            }
            $page=$page+1;
            $this->fd($page);
        }else{
            return true;
        }

    }

}